﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace SharpTrack.Data.Model
{
    /// <summary>
    /// Класс представляет собой файл-вложение
    /// </summary>
    public class Attachment
    {
        private Guid attachmentId;
        private string name;
        private byte[] content;
        private bool isChanged = false;

        /// <summary>
        /// Конструктор для вложения с идентификатором
        /// </summary>
        /// <param name="attachmentId">Идентификатор вложения</param>
        /// <param name="attachmentName">Имя файла</param>
        /// <param name="content">Бинарное содержимое файла</param>
        public Attachment(Guid attachmentId, string attachmentName, byte[] content)
        {
            this.attachmentId = attachmentId;
            this.name = attachmentName;

            FillContentArray(content);
        }


        public Attachment(string attachmentName, byte[] content)
        {
            this.attachmentId = Guid.NewGuid();
            this.name = attachmentName;

            FillContentArray(content);

            isChanged = true;
        }

        /// <summary>
        /// Идентификатор вложения. Только для чтения
        /// </summary>
        public Guid AttachmentId
        {
            get
            {
                return attachmentId;
            }
        }

        /// <summary>
        /// Название вложения
        /// </summary>
        public String Name
        {
            get
            {
                return name;
            }
            set
            {
                if (Name != value)
                {
                    name = value;
                    isChanged = true;
                }
            }
        }

        /// <summary>
        /// Размер вложения. Только для чтения
        /// </summary>
        public long Size
        {
            get
            {
                return content.LongLength;
            }
        }

        /// <summary>
        /// Бинарное содержимое вложения. Только для чтения
        /// </summary>
        public byte[] Content
        {
            get
            {
                return content;
            }
        }

        public bool IsChanged
        {
            get
            {
                return isChanged;
            }
        }

        private void FillContentArray(byte[] content)
        {
            this.content = new byte[content.Length];
            for (long i = 0; i < content.LongLength; i++)
            {
                this.content[i] = content[i];
            }
        }

    }
}
